import type { UserWrapper } from '@/api/types/userWrapper'
import { defineStore } from 'pinia'
import { useImTokenStore } from './imToken'
import { useLegalTokenStore } from './legalToken'

export const useUnifiedTokenStore = defineStore('unifiedToken', () => {
  const legal = useLegalTokenStore()
  const im = useImTokenStore()

  /** 登录成功后统一处理 */
  const onLoginSuccess = (data: UserWrapper) => {
    if (!data) {
      throw new Error('onLoginSuccess 传入了 undefined')
    }

    if (!data.legalUser) {
      throw new Error('onLoginSuccess: res.legalUser 缺失，你登录接口没返回这个字段')
    }
    if (data.legalUser?.token) {
      legal.setLegalToken(
        data.legalUser.token,
        7200, // TODO 后端真实有效期
      )
    }

    if (data.imUser) {
      im.setImToken(data.imUser)
    }
  }

  /** 获取主系统 token（小程序大部分 API 用这个） */
  const getLegalToken = () => legal.getValidToken()

  /** 获取 IM token（WebSocket / 消息系统用） */
  const getImAccessToken = () => im.getValidImToken()

  /** 是否已登录 */
  const isLoggedIn = computed(() => !legal.isExpired)

  /** 统一退出登录 */
  const logout = () => {
    legal.logout()
    im.logout()
  }

  return {
    onLoginSuccess,
    getLegalToken,
    getImAccessToken,
    isLoggedIn,
    logout,
  }
})
